--- title: Capture keywords: fastai sidebar: home_sidebar summary: "Helper " description: "Helper " nb_path: "01_capture.ipynb" ---
{% raw %}
/Users/eway/.pyenv/versions/3.8.3/lib/python3.8/site-packages/pandas/compat/__init__.py:97: UserWarning: Could not import the lzma module. Your installed Python is incomplete. Attempting to use lzma compression will result in a RuntimeError.
  warnings.warn(msg)
{% endraw %} {% raw %}
{% endraw %} {% raw %}
{% endraw %} {% raw %}

class OpenHSI[source]

OpenHSI(n_lines:int=16, processing_lvl:int=2, json_path:str='assets/cam_settings.json', pkl_path:str='assets/cam_calibration.pkl', print_settings=False) :: DataCube

Base Class for the OpenHSI Camera.

{% endraw %} {% raw %}
{% endraw %} {% raw %}
cam = OpenHSI()
{% endraw %}

Running in notebook slow downs.

{% raw %}

OpenHSI.collect[source]

OpenHSI.collect()

Collect the hyperspectral datacube.

{% endraw %}

To add a custom camera, five methods need to be defined in a class to:

  1. Initialise camera __init__,
  2. Open camera start_cam,
  3. Close camera stop_cam, and
  4. Capture a picture as a numpy array get_img.
  5. Update the exposure settings set_exposure

By inheriting from the OpenHSI class, all the methods to load settings/calibration files, collect datacube, saving data to NetCDF, and viewing as RGB are integrated. Furthermore, the custom camera class can be passed to a SettingsBuilder class for calibration.

{% raw %}

class SimulatedCamera[source]

SimulatedCamera(img_path:str=None, n_lines:int=16, processing_lvl:int=2, json_path:str='assets/cam_settings.json', pkl_path:str='assets/cam_calibration.pkl', print_settings=False) :: OpenHSI

Add

{% endraw %} {% raw %}
{% endraw %} {% raw %}
with SimulatedCamera(img_path="assets/great_hall_slide.png", n_lines=1028, processing_lvl = 3, json_path="assets/cam_settings.json",pkl_path="assets/cam_calibration.pkl") as cam:
    cam.collect()
    fig = cam.show(hist_eq=True)
    
fig
100%|██████████| 1028/1028 [00:17<00:00, 58.00it/s]
{% endraw %} {% raw %}
plt.imshow(cam.rgb_buff.data)
<matplotlib.image.AxesImage at 0x125f75340>
{% endraw %} {% raw %}
plt.plot(cam.λs,cam.xs[0],'r',label="X(λ)")
plt.plot(cam.λs,cam.ys[0],'g',label="Y(λ)")
plt.plot(cam.λs,cam.zs[0],'b',label="Z(λ)")
plt.grid(); plt.minorticks_on()
plt.legend()
plt.xlabel("λ (nm)")
plt.ylabel("CIE XYZ value")
{% endraw %} {% raw %}
plt.plot(cam.binned_wavelengths,cam.dc.data[350,300,:],label="rock")
plt.plot(cam.binned_wavelengths,cam.dc.data[50,300,:], label="sky")
plt.plot(cam.binned_wavelengths,cam.dc.data[150,300,:],label="water")
plt.legend()
plt.xlabel("wavelength (nm)")
plt.ylabel("pseudo-spectra")
{% endraw %}